from flask import Flask
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from flask_session import Session

from models import db
from utils.commons import set_after_request_handle_fuc, in_order_product
from views import index_bp, passport_bp, user_bp, shop_bp

app = Flask(__name__)
# 配置信息来自文件
app.config.from_pyfile('config.ini')
# 注册蓝图
app.register_blueprint(index_bp)  # 主页蓝图
app.register_blueprint(passport_bp, url_prefix='/passport')  # 登录注册的蓝图
app.register_blueprint(user_bp, url_prefix='/user')  # 关于用户的蓝图
app.register_blueprint(shop_bp, url_prefix='/shop')  # 购买物品的蓝图

# 模板过滤器
app.add_template_filter(in_order_product)


# 设置钩子函数，可以在调用视图函数之前自动执行
set_after_request_handle_fuc(app)

# 数据库注册到app
db.init_app(app)

# 创建Session对象（此时app这个flask对象中生成的session信息才会存储到Redis里）
Session(app)

manager = Manager(app)

# 生成migrate对象 用来数据库迁移
migrate = Migrate(app, db)
# 添加db命令
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()
